#include <cmodule_mgr.hpp>

shared_ptr<CModule_Mgr> CModule_Mgr::pCMsg_Mgr;
mutex m_cmsgMgrMutex;

CModule_Mgr::CModule_Mgr(){

}
 
CModule_Mgr::~CModule_Mgr(){

}

shared_ptr<CModule_Mgr> CModule_Mgr::getInstance(){
    lock_guard<mutex> gl(m_cmsgMgrMutex);
    if(nullptr == pCMsg_Mgr){
        pCMsg_Mgr.reset(new CModule_Mgr());
    }
    return pCMsg_Mgr;
}

void CModule_Mgr::destoryInstance(CModule_Mgr* pInstance){
    delete pInstance;
}


void CModule_Mgr::reg_module(int moduleId,CModule_Ptr pModule){
    if(0 == moduleId || nullptr == pModule)
        return;

    //unique_lock<shared_mutex> gl(m_moduleRwMutex);
    lock_guard<mutex> gl(m_moduleRwMutex);
    m_modules[moduleId] = pModule;
}

CModule_Ptr CModule_Mgr::get_module(int moduleId){
    CModule_Ptr pModule = nullptr;
    if(0 == moduleId)
        return pModule;
    //shared_lock<std::shared_mutex> gl(m_moduleRwMutex);
    lock_guard<mutex> gl(m_moduleRwMutex);
    if(m_modules.find(moduleId) != m_modules.end())
        pModule = m_modules[moduleId];

    return pModule;
}